package com.bee.剑指offer;

/**
 * 斐波纳契数列，又称黄金分割数列，指的是这样一个数列：1、1、2、3、5、8、13、21、
 * ……在数学上，斐波纳契数列以如下被以递归的方法定义：F0=0，F1=1，Fn=F(n-1)+F(n-2)（n>=2，n∈N*）。
 *
 * @version 1.0.0
 * @Author yong.Mr
 * @data 2021-03-10
 */
public class 斐波那契数列 {

    /**
     * 递归的实现方式
     */
    public static int Fibonacci(int n) {
        if (n <= 2) {
            return 1;
        }
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }

    /**
     * 递推的实现方式
     */
    public static int fibonacciNormal(int n) {
        int n1 = 1;
        int n2 = 1;
        int sn = 0;
        for (int i = 0; i < n - 2; i++) {
            sn = n1 + n2;
            n1 = n2;
            n2 = sn;
        }
        return sn;
    }

    public static void main(String[] args) {
        int fibonacci = Fibonacci(4);
        System.out.println(fibonacci);
        System.out.println(fibonacciNormal(6));
    }
}
